from pathlib import Path
import json
import plotly.express as px
import pandas as pd

# 将数据作为字符串读取并转换为python对象
path = Path('eq_data/eq_data_30_day_m1.geojson')
try:
    contents = path.read_text()
except:
    contents = path.read_text(encoding='utf-8')
all_eq_data = json.loads(contents)

# 将数据文件转换为更易阅读的版本
path = Path('eq_data/readable_eq_data.geojson')
readable_contents = json.dumps(all_eq_data,indent=4)
path.write_text(readable_contents)

# 查看数据集中的所有地震
all_eq_dicts = all_eq_data['features']
print(len(all_eq_dicts))

# 提取震级，位置数据等
mags,titles,lons,lats = [],[],[],[]
all_title = all_eq_data["metadata"]["title"]
for eq_dict in all_eq_dicts:
    mag = eq_dict['properties']['mag']
    title = eq_dict['properties']['title']
    lon = eq_dict['geometry']['coordinates'][0]
    lat = eq_dict['geometry']['coordinates'][1]
    mags.append(mag)  # 震级
    titles.append(title)  # 位置标题
    lons.append(lon)  # 经度
    lats.append(lat)  # 纬度

# print(mags[:10])
# print(titles[:2])
# print(lons[:5])
# print(lats[:5])

# 封装数据
data = pd.DataFrame(
    data=zip(lons,lats,titles,mags),columns=['经度','纬度','位置','震级']
)
data.head()
# 绘制地震散点图
fig = px.scatter(
    data,  # 指定数据源
    x='经度',
    y='纬度',
    range_x=[-200,200],
    range_y=[-90,90],
    width=800,
    height=800,
    title=all_title,
    size='震级', # 根据震级定制标记的尺寸
    size_max=10,
    color='震级', # 增加颜色渐变
    color_continuous_scale='Viridis', # 指定标记颜色
    hover_name='位置',
)
fig.write_html('global_earthquakes.html')
fig.show()